;==============================================================================
; 调试步骤3：基础 + A20 + GDT加载
;==============================================================================
bits 16
org 0x7c00

start:
    cli
    xor ax, ax
    mov ds, ax
    mov es, ax
    mov ss, ax
    mov sp, 0x7c00
    sti
    
    ; 显示步骤1
    mov ah, 0x0e
    mov al, '1'
    int 0x10
    
    ; 开启A20
    in al, 0x92
    or al, 2
    out 0x92, al
    
    mov al, '2'
    int 0x10
    
    ; 加载GDT
    lgdt [gdt_descriptor]
    
    ; 显示步骤3成功
    mov al, '3'
    int 0x10
    mov al, ':'
    int 0x10
    mov al, 'G'
    int 0x10
    mov al, 'D'
    int 0x10
    mov al, 'T'
    int 0x10
    
    ; 挂起
    jmp $

;==============================================================================
; GDT
;==============================================================================
align 8
gdt_start:
    dq 0x0000000000000000

gdt_code:
    dw 0xFFFF
    dw 0x0000
    db 0x00
    db 0b10011010
    db 0b11001111
    db 0x00

gdt_data:
    dw 0xFFFF
    dw 0x0000
    db 0x00
    db 0b10010010
    db 0b11001111
    db 0x00

gdt_end:

gdt_descriptor:
    dw gdt_end - gdt_start - 1
    dd gdt_start

times 510 - ($ - $$) db 0
dw 0xaa55

